//
//  UIScrollView+FFRefresh.h
//  FFSDK
//
//  Created by  isoftstone on 16/4/27.
//  Copyright © 2016年 isoftstone. All rights reserved.
//

#import <UIKit/UIKit.h>
/**
    刷新状态
 */
typedef enum : NSUInteger {
    /** 普通闲置状态 */
    FFRefreshStateIdle = 1,
    /** 松开就可以进行刷新的状态 */
    FFRefreshStatePulling,
    /** 正在刷新中的状态 */
    FFRefreshStateRefreshing,
    /** 即将刷新的状态 */
    FFRefreshStateWillRefresh,
    /** 所有数据加载完毕，没有更多的数据了 */
    FFRefreshStateNoMoreData
} FFRefreshState;

/**
    header,AutoFooter,BackFooter
 */
typedef enum : NSUInteger {

    FFRefreshPartHeader = 1,
    FFRefreshPartAutoFooter,
    FFRefreshPartBackFooter,
} FFRefreshPart;

//刷新回调
typedef void(^refreshBlock)(void);

@interface UIScrollView (FFRefresh)
#pragma mark - headerRefresh
/**
 *  创建普通的header,block
 *
 *  @param block 刷新回调
 */
- (void)addNormalHeaderRefreshWithBlock:(refreshBlock)block;
/**
 *  创建普通的header,target
 *
 *  @param obj      目标
 *  @param selector 方法
 */
- (void)addNormalHeaderRefreshWithTarget:(id)obj action:(SEL)selector;
/**
 *  创建动画header,block
 *
 *  @param block 刷新回调
 */
- (void)addGifHeaderRefreshWithBlock:(refreshBlock)block;
/**
 *  创建动画header,target
 *
 *  @param obj      目标
 *  @param selector 方法
 */
- (void)addGifHeaderRefreshWithTarget:(id)obj action:(SEL)selector;

#pragma mark- footerRefresh
/**
 *  创建普通的footer,block
 *
 *  @param block 刷新回调
 */
- (void)addAutoNormalFooterRefreshWithBlock:(refreshBlock)block;
/**
 *  创建普通的footer,target
 *
 *  @param obj      目标
 *  @param selector 方法
 */
- (void)addAutoNormalFooterRefreshWithTarget:(id)obj action:(SEL)selector;
/**
 *  创建动画footer,block
 *
 *  @param block 刷新回调
 */
- (void)addAutoGifFooterRefreshWithBlock:(refreshBlock)block;
/**
 *  创建动画footer,target
 *
 *  @param obj      目标
 *  @param selector 方法
 */
- (void)addAutoGifFooterRefreshWithTarget:(id)obj action:(SEL)selector;
/**
 *  创建自动回弹的footer,block
 *
 *  @param block 刷新回调
 */
- (void)addBackNormalFooterRefreshWithBlock:(refreshBlock)block;
/**
 *  创建自动回弹的block,target
 *
 *  @param obj      目标
 *  @param selector 方法
 */
- (void)addBackNormalFooterRefreshWithTarget:(id)obj action:(SEL)selector;
/**
 *  创建自动回弹动画的block,block
 *
 *  @param block 刷新回调
 */
- (void)addBackGifFooterRefreshWithBlock:(refreshBlock)block;

/**
 *  创建自动回弹动画的block,target
 *
 *  @param obj      目标
 *  @param selector 方法
 */
- (void)addBackGifFooterRefreshWithTarget:(id)obj action:(SEL)selector;


#pragma mark- Common

/**
 *  创建动画，在动画header/footer时有效
 *
 *  @part  FFRefreshPartHeader/FFRefreshPartAutoFooter/FFRefreshPartBackFooter
 *  @param list  动画数组
 *  @param state 状态
 */
- (void)setPart:(FFRefreshPart)part images:(NSArray *)list forState:(FFRefreshState)state;

/**
 *  创建标题
 *
 *  @part  FFRefreshPartHeader/FFRefreshPartAutoFooter/FFRefreshPartBackFooter
 *  @param str   标题
 *  @param state 状态
 */
- (void)setPart:(FFRefreshPart)part headerTitle:(NSString *)str forState:(FFRefreshState)state;

/**
 *  开始刷新
 *  @part  FFRefreshPartHeader/FFRefreshPartAutoFooter/FFRefreshPartBackFooter
 */
- (void)beginRefresh:(FFRefreshPart)part;


/**
 *  是否正在刷新
 *
 *  @part  FFRefreshPartHeader/FFRefreshPartAutoFooter/FFRefreshPartBackFooter
 *  @return bool
 */
- (BOOL)isRefreshing:(FFRefreshPart)part;


/**
 *  结束刷新
 *  @part  FFRefreshPartHeader/FFRefreshPartAutoFooter/FFRefreshPartBackFooter
 */
- (void)endRefresh:(FFRefreshPart)part;


/**
 *  没有更多数据
 */
- (void)setNoMoreData;


/**
 *  重置没有更多数据状态
 */
- (void)resetNoMoreData;

@end
